﻿#!/bin/bash
###############################################################################
#       脚本名称: shell_script.sh
#       功能描述：演示shell脚本开发规范的示例脚本，简要的功能描述。
#       作者: 林再来
#       日期: 2025-06-24
#       版本: 2.0
#       功能:
#           1、增加版本信息显示。
#           2、
#           3、
#       依赖(插件/命令):
#           1、expect
#           2、openssl
#           3、openssl-clients
#       作者: 林再来
#       日期: 2025-06-21
#       版本: 1.0
#       功能:
#           1、脚本初始化，基础功能实现。
#           2、
#           3、
#       依赖(插件/命令):
#           1、bash
#           2、env
#           3、grep
###############################################################################

# 【路径处理区域】
# 项目的根路径
export shell_home="/opt/shell"

# 【引入脚本区域】
source ${shell_home}/scripts/base/menu.sh
source ${shell_home}/scripts/utils/utils.sh
# 【全局变量/局部变量区域】
# 全局常量定义
export SCRIPT_NAME=$(basename "$0")
export LOG_FILE="${easy_home}/logs/${SCRIPT_NAME}.log"

# 【功能函数区域】
# 函数: 日志函数(info) 既输出到stderr又写入日志文件
# 参数: $* - 要输出的日志信息。
# 返回: 无返回值。
function log_info() {
    local message="[INFO] $(date '+%Y-%m-%d %H:%M:%S') $*"
    echo "$message" >&2
    echo "$message" >> "$LOG_FILE" 2>/dev/null
}

# 函数: 日志函数(error)
# 参数: $* - 要输出的错误信息。
# 返回: 无返回值。
function log_error() {
    echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $*" >&2
}

# 函数: 显示帮助信息
# 参数: 无入参, 无出参。
# 返回: 无返回值。
function usage() {
    cat << EOF
用法: $SCRIPT_NAME [选项] <文件>

这是一个演示shell脚本开发规范的示例脚本。

选项:
    -h, --help      显示帮助信息
    -v, --verbose   详细输出

示例:
    $SCRIPT_NAME -v example.txt

EOF
}

# 函数: 检查文件是否存在
# 参数: $1 - 文件路径。
# 返回: 0-成功, 1-失败。
function check_file_exists() {
    local file="$1"
    if [[ ! -f "$file" ]]; then
        log_error "文件不存在: $file"
        return 1
    fi
    return 0
}

# 测试函数区域
# 函数: 测试函数
# 参数: 无入参, 无出参。
# 返回: 无返回值。
function test_function() {
    log_info "测试函数"
}

# 主函数区域

# 函数: 主函数
# 参数: $@ - 命令行参数。
# 返回: 退出码 0-成功, 1-失败。
function main() {
    local verbose=false
    
    # 处理选项
    while getopts "hv" opt; do
        case $opt in
            h) usage; exit 0 ;;
            v) verbose=true ;;
            ?) usage; exit 1 ;;
        esac
    done
    
    shift $((OPTIND-1))
    
    # 检查必需参数
    if [[ $# -eq 0 ]]; then
        log_error "缺少文件参数"
        usage
        exit 1
    fi
    
    local input_file="$1"
    
    if [[ "$verbose" == true ]]; then
        log_info "详细模式已启用"
        log_info "处理文件: $input_file"
    fi
    
    # 检查文件
    if check_file_exists "$input_file"; then
        log_info "文件处理完成: $input_file"
        exit 0
    else
        log_error "脚本执行失败"
        exit 1
    fi
}

# 调用区域
# 如果脚本直接运行，执行main函数
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    main "$@"
fi
